La rédaction du document a nécessité plus de temps que prévu :-(.
L’objectif de ce petit tutoriel est de guider dans l’installation de R et Rstudio sous Windows et de s’assurer que vous avez une distribution prête pour la suite des travaux que nous allons effectuer.
Pour une première installation, vous aurez besoin de:
Suivez ensuite les étapes suivantes:
(lorsque je mets [numerodeversion] je veux parler du numero de la version récente que vous trouverez: En général, il s’agit d’une succession de chiffres séparés par des points. Ex: 1.2, 3.5.1, etc.)
Le logiciel R vient avec le minimum pour faire les analyses statistiques. Mais vous aurez besoin d’installer au cours de l’apprentissage un ensemble de petites portions de logiciels qui vont venir compléter R pour faciliter certains traitements et analyses de données. Ces portions sont appelées package. Maintenant nous allons créer un dossier qui va contenir l’installation pour les futurs packages, sans que vous ayez à vous déranger lors de l’installation d’une nouvelle version de R.
Document un dossier qui va contenir vos packages (RPackage par exemple)R_LIBS_USER qui va pointer vers le dossier que vous avez créé pour contenir les packages.Pour faire un update sous Windows, créez le dossier qui va contenir vos package au niveau de la section précédente, et installez comme une nouvelle fois R. Si vous avez perdu des package sur le coup, on en discute à la séance de formation.
R se trouve déjà dans les dépôts officiels sous linux à dérivé Debian. Mais vous n’aurez pas sûrement la toute dernière version de R, ceci dû à un décalage entre l’ajout de la dernière version et sa sortie. Il est préférable de garder ces options par défaut, mais vous pouvez ajouter le dépôt de la dernière version si cela vous chante. C’est la première ligne de la commande.
sudo add-apt-repository "deb http://cran.rstudio.com/bin/linux/ubuntu $(lsb_release -sc)/"
sudo apt install r-base r-base-core
Au cas ou vous avez déjà installé R vous pouvez juste faire un upgrade (sous ubuntu 18.04 le update est fait automatiquement avant un upgrade. Sous les versions inférieures, faites d’abord un update).
sudo add-apt-repository "deb http://cran.rstudio.com/bin/linux/ubuntu $(lsb_release -sc)/"
sudo apt upgrade
Si vous n’avez pas de distribution complète sur votre machine, vous allez devoir installer une distribution minimale à des fins de démonstration.
Vous aurez ainsi besoin d’installer les packages suivants sous R: tidyverse et tinytex.
install.packages("tidyverse")
install.packages("tinytex")
tinytex::install_tinytex()
Si vous avez déjà une distribution complète de LaTeX sur votre ordinateur, plus besoin d’installer le package tinytex sur votre machine.
Ce cas pratique provient de données utilisées en évaluation d’impact a l’école, un de nos anciens TPs.
Dans ce cas pratique, nous allons analyser des données provenant d’une évaluation d’impact à assignation aléatoire (randomisée). L’objectif est de vérifier si une baisse de coûts liés à l’obtention des résultats du VIH Sida, amène une hausse du nombre de personnes qui cherchent à obtenir leur résultat. Pour cela, on effectue de façon aléatoire des expériences sur des individus qui se présentent pour effectuer le test du VIH Sida. En évaluation d’impact, on parle d’Essais Randomisés (Random Control Trial). Les sujets au test du VIH sont encouragés ou non dans leur volonté d’obtenir leur résultat. On annonce ainsi à un individu choisi de façon aléatoire, qui vient effectuer son test qu’il recevra un montant s’il vient chercher le résultat de son test de VIH. Cette annonce n’est pas faite à toutes les personnes ; elle est faite à un certain nombre, choisi aléatoirement. Le montant que l’on annonce à un sujet diffère de celui annoncé à un autre. Les montants varient donc en fonction des différents individus. Cette variation est, elle aussi aléatoire. Les informations concernant les individus de l’expérience sont dans la base du cas pratique.
Un coup d’œil sur la base de données (les 5 premières variables et les 6 premières observations):
sexe age niveau_etude resultat_test incitation_recue
1 Masculin 18 8 Seronegatif Oui
2 Masculin 19 7 Seronegatif Oui
3 Masculin 21 11 Seronegatif Oui
4 Feminin 38 0 Seronegatif Oui
5 Masculin 54 0 Seronegatif Oui
6 Masculin 19 5 Seronegatif Oui
Vous pouvez déjà deviner à quoi correspond certaines variables. Notre question est la suivante: En jetant un coup d’œil sur les données, faut-il encourager les personnes à chercher leur résultat?
Pour ceux qui n’étaient pas là , vous avez raté quoi…
Pas grand chose. Après une brève présentation sur moi et sur R, nous avons travaillé à partir d’un dossier nommé seance1 dont la structure est affichée ici, juste en bas du paragraphe. Il contient les instructions de début pour l’installation de R ainsi qu’une définition de la base de données utilisée dans le travail, qui existe sous différents formats dans le dossier data.
On a appris à charger une base sous R, sous format .txt, et au passage on a appris quelques raccourcis claviers.
Structure du dossier partagé
seance1
+
++++++++ data/
+ +
+ ++++++++++ cas_pratique.dta
+ ++++++++++ cas_pratique.RData
+ ++++++++++ cas_pratique.sav
+ ++++++++++ cas_pratique.txt
+ ++++++++++ cas_pratique.xlsx
+
+
++++++++ seance1.R
+
++++++++ 1-installation.html
Pour ceux qui veulent installer R et Rstudio, suivez les instructions dans la première section
R c’est quoi? Sans rentrer dans les racines de la naissance de R, que je vous invite à regarder une fois que vous deviendrez fanatique, je vais y aller de façon brève:
R1.0.0 est donc né officiellement le 29 Février 2000. L’avantage était sa gratuité, mais aussi sa disponibilité pour presque tous les OS (Mac, Windows, Linux). Immédiatement, plein d’anciens acteurs de S, s’y sont intéressés. Ils ont apporté une évolution constante, et le monde entier a contribué à améliorer le logiciel et le langage, puisqu’il était accessible à tous.
Aujourd’hui, R est une immense bulle dans le monde du développement statistique, et a des tentacules incroyables…. On en reviendra tout au long de la série.
R est donc un langage de programmation pour étudier et travailler des données, gratuit, disposant d’une communauté incroyable et très active. Il existe une tonne de ressources en ligne pour s’entraîner et le maîtriser, qui expliquent les détails les plus minutieux du logiciel.
Je fais ici une petite présentation de Rstudio. Rstudio, est un environnement de développement intégré pour R, dont la premère sortie date du 28 Février 2011. L’environnement a été créé par JJ Allaire qui a fondé une société du même nom. Rstudio est juste un environnement pour faciliter l’utilisation de R. Il est bien possible d’effectuer ses analyses statistiques sous R sans Rstudio, mais ce dernier offre une convivialité de travail qui permet de gagner en temps et d’eviter de nombreuses frustrations.
Son actuel (2019) Chief Scientist est Hadley Wickham et pleins d’ingénieurs et de développeurs de Rstudio ont contribué énormément à l’avancée de R à travers les packages qu’ils ont créé et mis à la disposition de tout un chacun.
On a ouvert le fichier seance1.R en double-cliquant dessus. Il était vide, mais s’est ouvert sous Rstudio. On a profité pour apprendre et connaître un peu l’environnement de Rstudio, ainsi que les différentes fenêtres. On a aussi appris comment définir un répertoire de travail grâce aux commandes getwd() et setwd(). On a appelé le fichier seance1.R un fichier script, où on tape les commandes qui vont s’exécuter après dans la console.
On a ensuite importé une base de données au format .txt en utilisant une fonction. On a dit que les commandes sous R se basent sur des fonctions, dont on peut accéder à l’aide en faisant ?nom_de_la_fonction. On a remarqué que concernant la fonction read.table pour charger les fichiers .txt, on a plusieurs options ou arguments… On a ensuite chargé la base de données dans un objet appelé cas_pratique qui est un data.frame; un objet liste de R. On a vu aussi que les commentaires dans un fichier script sont précédés de #.
#ceci est un commentaire.
cas_pratique <- read.table("data/cas_pratique.txt", header = TRUE)
$ en utilisant une commande nommée str.
str(cas_pratique)
'data.frame': 1078 obs. of 9 variables:
$ sexe : Factor w/ 2 levels "Feminin","Masculin": 2 2 2 1 2 2 1 2 2 2 ...
$ age : int 18 19 21 38 54 19 29 20 33 35 ...
$ niveau_etude : int 8 7 11 0 0 5 6 8 0 0 ...
$ resultat_test : Factor w/ 2 levels "Seronegatif",..: 1 1 1 1 1 1 1 1 1 1 ...
$ incitation_recue : Factor w/ 2 levels "Non","Oui": 2 2 2 2 2 2 2 2 2 2 ...
$ montat_incitation : num 935 467 467 935 935 ...
$ test_cherche : Factor w/ 2 levels "Non","Oui": 2 2 1 2 2 2 1 1 1 1 ...
$ rapports_sexuels : Factor w/ 2 levels "Non","Oui": 2 1 1 2 2 2 2 2 2 2 ...
$ rapports_sexuels_12m: Factor w/ 2 levels "Non","Oui": 2 NA NA 2 2 NA 1 2 2 2 ...
On a ensuite vue que les variables sont en fait des vecteurs, qui ont des caractéristiques différentes et particulières. Les facteurs par exemple sont une sorte de représentation étiquetée des variables catégorielles.
Voilà, le rattrapage est terminé, sauf pour les raccourcis suivants sous RStudio:
<-
Installez juste les packages du tidyverse et une version minimale de latex pour faire tourner la démo que nous ferons si vous n’avez pas latex sur votre machine.
install.packages("tidyverse")
install.packages("tinytex")
tinytex::install_tinytex()
Pour ceux qui n’étaient pas là , vous avez raté quoi…
La partie statistiques descriptives. Après avoir effectué un petit rappel de la séance 1, on a continué l’exploration de nos données en faisant un détour sur les données manquantes. Malheureusement, certains n’avaient les packages nécessaires pour charger les bases sous d’autres formats. Nous allons y venir dans la section ce qui restait, que je vous invite vivement à suivre pas à pas. On a appris que dans R, les objets ont des modes c’est à dire le type de données qui les constitue. Ils peuvent être soit des caractères, soit des numériques, soit des entiers, soit des logiques (TRUE ou FALSE) ou même des complexes. On a vu aussi que sous R, vous avez exactement deux principales manières de stocker des données.
data.frame1, liste.
Finalement, on a dit que R lorsqu’il le peut effectue, sur des stockages de mode unique, une conversion automatique vers le mode le plus fort lorsque cela est nécessaire.
On a appris à créer une fonction sous R, un vecteur, une table, un barplot, et au passage on a répondu à des questions sur notre base de données.
Malheureusement, on n’a pas eu le temps de parcourir tout ce qui avait été prévu. Je vous invite à lire la section Ce qui restait pour combler le gap.
Dans cette section on va présenter un bref aperçu de ce qu’on a fait le jour de la séance, pour permettre de se rappeler. Pour ceux qui veulent en savoir plus que ce qui a été fait dans les deux petites heures, vous pouvez passer à la section suivante.
data.frameOn a rechargé une nouvelle fois le data.frame de travail. C’est le data.frame cas_pratique.txt. Mais avant, il ne faut pas oublier de redéfinir le répertoire de travail de R à l’endroit où se trouve le fichier script. Rassurez-vous aussi d’avoir aussi le dossier data avec les bases de données sous différents formats. Pour définir le répertoire de travail au répertoire courant, une fois que vous aurez ouvert le fichier script , cela se fera de la façon suivante:
Session dans Rstudio,Set Working DirectoryTo Source File Location.Le chargement de la base de données s’effectue de la façon suivante:
cas_pratique <- read.table(file = "data/cas_pratique.txt", header = TRUE)
On a observé les statistiques sommaires de la base de données avec la fonction summary et on a examiné ses variables, en utilisant la fonction str.
summary(cas_pratique)
sexe age niveau_etude resultat_test
Feminin :573 Min. :13.00 Min. : 0.000 Seronegatif:1018
Masculin:505 1st Qu.:21.25 1st Qu.: 0.000 Seropositif: 60
Median :32.00 Median : 3.000
Mean :33.40 Mean : 3.612
3rd Qu.:43.00 3rd Qu.: 7.000
Max. :80.00 Max. :12.000
NA's :124
incitation_recue montat_incitation test_cherche rapports_sexuels
Non:237 Min. : 0.0 Non:339 Non: 87
Oui:841 1st Qu.: 233.6 Oui:739 Oui:991
Median : 467.3
Mean : 560.5
3rd Qu.: 934.6
Max. :1401.9
rapports_sexuels_12m
Non :203
Oui :684
NA's:191
str(cas_pratique)
'data.frame': 1078 obs. of 9 variables:
$ sexe : Factor w/ 2 levels "Feminin","Masculin": 2 2 2 1 2 2 1 2 2 2 ...
$ age : int 18 19 21 38 54 19 29 20 33 35 ...
$ niveau_etude : int 8 7 11 0 0 5 6 8 0 0 ...
$ resultat_test : Factor w/ 2 levels "Seronegatif",..: 1 1 1 1 1 1 1 1 1 1 ...
$ incitation_recue : Factor w/ 2 levels "Non","Oui": 2 2 2 2 2 2 2 2 2 2 ...
$ montat_incitation : num 935 467 467 935 935 ...
$ test_cherche : Factor w/ 2 levels "Non","Oui": 2 2 1 2 2 2 1 1 1 1 ...
$ rapports_sexuels : Factor w/ 2 levels "Non","Oui": 2 1 1 2 2 2 2 2 2 2 ...
$ rapports_sexuels_12m: Factor w/ 2 levels "Non","Oui": 2 NA NA 2 2 NA 1 2 2 2 ...
Après avoir remarqué que la base compte 9 variables et 1078 observations, on a vu que les variables sont des vecteurs ayant différents sortes de type, appelés modes. Les facteurs, appelés factor par exemple, sont des entiers, avec des étiquettes derrière chaque valeur qui sont les niveaux (level) de ce facteur; c’est en quelques sortes les modalités de la variable catégorielle.
Les variables du data.frame peuvent être accessibles avec le dollar, $. On a vu aussi que les variables du data.frame sont des vecteurs, qui contiennent donc des valeurs de même mode. On a ensuite décidé de calculer le pourcentage de manquants sur la variable sexe, en utilisant les fonctions is.na, sum et length, et en se rappelant que R effectue une conversion lorsque cela est nécessaire.
En effet la fonction is.na appliquée sur un vecteur, retourne un vecteur de mode logical qui teste si chaque valeur du vecteur donnée en argument est une valeur manquante ou pas, et retourne un TRUE si oui, et un FALSE sinon.
Grâce à la conversion, le TRUE est converti en 1 et le FALSE en 0. On a donc cherché le pourcentage de manquants sur la variable sexe de la façon suivante:
sum(is.na(cas_pratique$sexe)) / length(cas_pratique$sexe)
[1] 0
On a eu l’idée d’appliquer la même chose à toutes les variables du data.frame. Mais pour ne pas écrire toutes les variables avec le dollar $, on a décidé de faire une fonction qui va prendre un vecteur x en paramètre et renvoyer le pourcentage de manquants dans x. On a donc appris à créer une fonction que l’on a appelée pourc_manq_calc. On a compris qu’une fonction est un objet qui prend en paramètre un ou plusieurs arguments. On a appris la syntax de définition d’une fonction.
pourc_manq_calc <- function(x){
return(sum(is.na(x)) / length(x))
}
On aurait pu gagner en lignes de codes en récrivant la fonction de la façon suivante :
pourc_manq_calc <- function(x) sum(is.na(x)) / length(x)
Celà nous permet d’apprendre trois choses:
Si la fonction ne tient que sur une seule instruction, on peut la présenter sans les accolades sur la même ligne.
Lorsqu’on ne met pas de return, la fonction retourne l’objet issu du dernier calcul qu’il effectue.
Pour redéfinir une fonction, il faut juste écraser l’objet ayant le nom de la fonction par la nouvelle définition.
On a ensuite appris une nouvelle fonction, apply, pour exécuter une fonction sur toutes les colonnes (dans ce cas on met MARGIN = 2) ou toutes les lignes (dans ce cas on met MARGIN = 1) d’un data.frame. On a exécuté la fonction pourc_manq_calc sur toutes les colonnes du data.frame cas_pratique et on a obtenu un vecteur de pourcentage de manquants de chaque variable. On a remarqué que ce vecteur avait des noms qui correspondaient au nom de chaque variable. Donc il est possible d’avoir des vecteurs dont chaque composante est nommée sous R.
pourcentage_manquants <- apply(X = cas_pratique, MARGIN = 2, FUN = pourc_manq_calc)
pourcentage_manquants
sexe age niveau_etude
0.0000000 0.0000000 0.1150278
resultat_test incitation_recue montat_incitation
0.0000000 0.0000000 0.0000000
test_cherche rapports_sexuels rapports_sexuels_12m
0.0000000 0.0000000 0.1771800
On a ensuite effectué un graphique en barre pour avoir le pourcentage de manquants par variables grâce à la fonction barplot.
barplot(pourcentage_manquants)
Figure 1: Exemple de barplot
On a ensuite vu que l’on pouvait changer un peu l’allure du graphique pour le rendre plus propre et plus beau, conformément à ce que nous voulons. On a décidé d’effectuer les changements suivants:
Donner un vecteur plus cohérent que des noms de variables séparés par des _ pour les noms au niveau des axes des abscisses (on a créé pour la première fois un vecteur de caractères dans R, nommé noms et on a utilisé l’argument names.arg de la fonction barplot).
Changer la couleur des barres (On a utilisé l’argument col de la fonction barplot).
Réduire légèrement la taille au niveau des noms sur l’axe des abscisses (On a utilisé l’argument cex.names de la fonction barplot)
Donner un titre aux axes des abscisses et des ordonnées et donner un titre au graphique (On a utilisé les arguments xlab, ylab et main respectivement)
Multiplier par 100 pour avoir les pourcentages2 sur le graphique en barre.
Je profite dans la démonstration d’en bas, pour vous ajouter plusieurs options pour les graphiques en barre en plus des 5 choses que l’on a citées en haut, afin de vous permettre de voir l’étendue des possibilités. Les codes de couleurs précédés de # sont des codes hexa, qui viennent du site https://www.color-hex.com.
On a ainsi obtenu ceci:
#On cree un vecteur en utilisant le c, la parenthese et les elements
#qui le compose entre griffes si ce sont des caracteres, separe par une virgule.
noms <- c("sexe", "age", "niveau d’étude",
"résultat du test", "incitation reçue?",
"montant de l'incitation", "test cherche?",
"rapports sexuels?", "rap. sexuels 12 mois?")
barplot(100*pourcentage_manquants,
#la couleur de la barre
col = "skyblue",
#Le nom des elements de l'axe des variables
names.arg = noms,
# Le titre du graphe
main = "REPRESENTATION DES % DE MANQUANTS",
# faut-il ou pas mettre une bordure?
# Si oui on peut mettre la couleur
border = "#0038B2",
#la fonte des axes en gras
font.axis = 1,
#la couleur sur les axes
col.axis = "#0038B2",
#la couleur sur les axes
col.main = "#CC2828",
#la couleur des titres des axes
col.lab = "#CC2828",
#La taille du titre
cex.main = 2,
#La taille sur les axes
cex.axis = 2,
# la taille des etiquettes des axes
cex.lab = 2,
#la position des etiquettes sur l'axe des ordonnees
##(perpendiculaire a l'axe)
las = 1,
#Faut-il des barres horizontales ou verticales?
horiz = FALSE,
# le titre de l'axe x
xlab = "Différentes variables",
# Le titre de l'axe y
ylab = "Pourcentage de manquants",
)
Figure 2: Barplot avec options supplementaires
Pour finir , si vous voulez faire des tours sur les options des graphiques en barre effectués avec les fonctionnalités basiques de R, regardez ici, là, ou encore là
Apres voir analysé les graphiques, on a effectué quelques tabulations pour obtenir des réponses sur certaines questions ludiques que l’on a posées.
rapports_sexuels_12m suivant le sexe?Pour répondre à la première question, on a utilisé une fonction de R, la fonction by. C’est une fonction qui mimique le tapply et permet d’effectuer une tâche suivant les valeurs d’un facteur. On a donc calculé le pourcentage de manquants, suivant les valeurs de la variable sexe pour la variable rapports_sexuels_12m.
by(cas_pratique$rapports_sexuels_12m, cas_pratique$sexe, pourc_manq_calc)
cas_pratique$sexe: Feminin
[1] 0.1151832
------------------------------------------------------------
cas_pratique$sexe: Masculin
[1] 0.2475248
On remarque que près de 25% des personnes de sexe Masculin n’y ont pas répondu, contre seule 11% chez les personnes de sexe Féminin. On a après effectué une tabulation grâce à la fonction table, pour regarder le nombre de personnes séropositives dans l’échantillon.
table_sida <- table(cas_pratique$resultat_test)
table_sida
Seronegatif Seropositif
1018 60
Mais la table nous donne les résultats absolus. Afin d’avoir les résultats relatifs, on a utilisé la fonction prop.table pour avoir les proportions au niveau de la variable resultat_test.
prop.table(table_sida)
Seronegatif Seropositif
0.94434137 0.05565863
On a conclut à une proportion d’environ 5% de séropositifs au sein de l’échantillon. C’est là que nous nous sommes arrêtés à la séance passée. Mais il restait certaines petites choses que nous n’avions pas abordées. C’est l’objet de la section suivante.
Il ne restait pas grand chose ;-). Charger les bases sous différents formats, faire des tabulations sur deux variables, faire une boîte à moustaches, et étudier l’option na.rm.
Comme dit précédemment, un package est juste une portion de logiciel, qui vient se greffer sur votre logiciel R, afin de vous permettre d’effectuer plus rapidement des tâches spécifiques.
Malheureusement, plusieurs personnes n’avaient pas les packages du tidyverse. Le tidyverse est un ensemble de packages qui forment un tout cohérent pour traiter les données, sortir des statistiques sommaires et en faire des visualisations. Si vous ne les avez pas, veuillez les installer de la façon suivante avant de continuer avec la section:
install.packages("tidyverse")
Aussi, puisque nous seront amener à étudier la rédaction de rapport directement sous RStudio, je vous conseille soit:
De vérifier que vous avez une installation de \(\LaTeX\) complète sur votre machine,
Dans le cas contraire, de vous assurer que vous avez une installation minimale requise pour effectuer presque tous les travaux, grâce au package tinytex que vous devez installer. Ensuite, installer la distribution minimale.
install.packages("tinytex")
tinytex::install_tinytex()
Pour pouvoir charger les bases de données de différents autres formats nous allons utiliser le package haven qui fait partie du tidyverse. Il dispose des fonctions read_stata (ou read_dta), read_spss (ou read_sav) pour charger respectivement les bases de données aux format stata (.dta) et spss (.sav). Nous allons les appliquer sur les bases de données sous les autres formats disponibles dans le dossier data. La fonction library, permet de charger un package.
library(haven)
cas_pratique_stata <- read_stata(file = "data/cas_pratique.dta")
str(cas_pratique_stata)
Classes 'tbl_df', 'tbl' and 'data.frame': 1078 obs. of 9 variables:
$ sexe : chr "Masculin" "Masculin" "Masculin" "Feminin" ...
..- attr(*, "format.stata")= chr "%9s"
$ age : num 18 19 21 38 54 19 29 20 33 35 ...
..- attr(*, "format.stata")= chr "%8.0g"
$ niveau_etude : chr "8" "7" "11" "0" ...
..- attr(*, "format.stata")= chr "%9s"
$ resultat_test : chr "Seronegatif" "Seronegatif" "Seronegatif" "Seronegatif" ...
..- attr(*, "format.stata")= chr "%11s"
$ incitation_recue : chr "Oui" "Oui" "Oui" "Oui" ...
..- attr(*, "format.stata")= chr "%9s"
$ montat_incitation : num 935 467 467 935 935 ...
..- attr(*, "format.stata")= chr "%9.0g"
$ test_cherche : chr "Oui" "Oui" "Non" "Oui" ...
..- attr(*, "format.stata")= chr "%9s"
$ rapports_sexuels : chr "Oui" "Non" "Non" "Oui" ...
..- attr(*, "format.stata")= chr "%9s"
$ rapports_sexuels_12m: chr "Oui" "NA" "NA" "Oui" ...
..- attr(*, "format.stata")= chr "%9s"
cas_pratique_spss <- read_sav(file = "data/cas_pratique.sav")
str(cas_pratique_spss)
Classes 'tbl_df', 'tbl' and 'data.frame': 1078 obs. of 9 variables:
$ sexe : chr "Masculin" "Masculin" "Masculin" "Feminin" ...
..- attr(*, "format.spss")= chr "A8"
$ age : num 18 19 21 38 54 19 29 20 33 35 ...
..- attr(*, "format.spss")= chr "F8.2"
$ niveau_etude : chr "8" "7" "11" "0" ...
..- attr(*, "format.spss")= chr "A2"
$ resultat_test : chr "Seronegatif" "Seronegatif" "Seronegatif" "Seronegatif" ...
..- attr(*, "format.spss")= chr "A11"
$ incitation_recue : chr "Oui" "Oui" "Oui" "Oui" ...
..- attr(*, "format.spss")= chr "A3"
$ montat_incitation : num 935 467 467 935 935 ...
..- attr(*, "format.spss")= chr "F8.2"
$ test_cherche : chr "Oui" "Oui" "Non" "Oui" ...
..- attr(*, "format.spss")= chr "A3"
$ rapports_sexuels : chr "Oui" "Non" "Non" "Oui" ...
..- attr(*, "format.spss")= chr "A3"
$ rapports_sexuels_12m: chr "Oui" "NA" "NA" "Oui" ...
..- attr(*, "format.spss")= chr "A3"
Pour charger une base de données au format .xlsx (excel), on peut utiliser un autre package nommé readxl qui fait aussi partie du tidyverse, et qui dispose de la fonction read_excel.
library(readxl)
cas_pratique_excel <- read_excel( #chemin vers le fichier
path = "data/cas_pratique.xlsx",
#La feuille à telecharger
sheet = 1)
str(cas_pratique_excel)
Classes 'tbl_df', 'tbl' and 'data.frame': 1078 obs. of 9 variables:
$ sexe : chr "Masculin" "Masculin" "Masculin" "Feminin" ...
$ age : num 18 19 21 38 54 19 29 20 33 35 ...
$ niveau_etude : chr "8" "7" "11" "0" ...
$ resultat_test : chr "Seronegatif" "Seronegatif" "Seronegatif" "Seronegatif" ...
$ incitation_recue : chr "Oui" "Oui" "Oui" "Oui" ...
$ montat_incitation : num 935 467 467 935 935 ...
$ test_cherche : chr "Oui" "Oui" "Non" "Oui" ...
$ rapports_sexuels : chr "Oui" "Non" "Non" "Oui" ...
$ rapports_sexuels_12m: chr "Oui" "NA" "NA" "Oui" ...
Vous aurez remarqué que lors des str que j’ai générés, les variables ne montrent pas exactement les mêmes propriétés que lorsqu’on avait chargé la base sous format .txt. En effet certains facteurs (factor) sont pris comme caractères, et le NA est considéré comme un caractère “NA” et non comme une donnée manquante. Nous reviendrons lors de la séance nettoyage de base de données sur comment nettoyer une base et obtenir les données qui peuvent coller avec votre analyse.
Lorsqu’on utilisait la fonction table pour chercher le nombre de séropositifs, un participant avait demandé comment avoir la prévalence par sexe. La question faisait partie des choses à voir. Pour avoir les proportions par sexe, on effectue une tabulation sur deux variables: le sexe et le résultat du test de dépistage.
table_sida_sexe <- table(cas_pratique$sexe, cas_pratique$resultat_test)
table_sida_sexe
Seronegatif Seropositif
Feminin 532 41
Masculin 486 19
Pour avoir les données en terme relatif, on utilise toujours la fonction prop.table. Mais cette fois-ci, on peut lui préciser un argument margin pour indiquer si l’on veut les pourcentages par ligne (margin = 1) ou par colonne (margin = 2). Lorsqu’on ne le précise pas, le pourcentage est calculé sur le total.
prop.table(table_sida_sexe, margin = 1)
Seronegatif Seropositif
Feminin 0.92844677 0.07155323
Masculin 0.96237624 0.03762376
Chez les personnes de sexe Feminin, le taux de prévalence est de 7.15% dans l’échantillon contre 3.76% chez les personnes de sexe Masculin.
La fonction boxplot permet de faire une boîte à moustaches sur une variable quantitative. On peut en faire un exemple avec l’âge.
boxplot(cas_pratique$age)
Figure 3: Boxplot simple
Si l’on veut visualiser la distribution suivant les valeurs d’une variable qualitative, on peut utiliser une notation dans R que l’on appelle notation formule: A gauche, on met une variable dépendante et à droite, la ou les variables explicatives suivies d’un plus. Entre la variable dépendante et les variables explicatives on met un tilde (~). Il faut ensuite préciser dans quelle base de données constituer la formule que l’on a écrite. C’est cette même notation qu’on peut utiliser lorsque l’on effectue des modèles. En appliquant cette formule sur la base de données, on a:
boxplot(age ~ sexe + resultat_test, data = cas_pratique)
Figure 4: Boxplot multiple
On peut donner des couleurs et éditer légèrement le graphique en:
Définissant le vecteur des couleurs que l’on désire mettre,
Donnant un titre au graphique,
Nommant les différents axes,
En donnant un vecteur qui va servir pour les noms sur les axes des abscisses,
En donnant une légende au graphique.
Je profite pour ajouter quelques options qui restent en général les mêmes pour les graphiques que vous allez rencontrer.
# C'est le vecteur pour les noms des abscicces
noms_abscisses <- c("Féminin et Séronégatif", "Masculin et Séronégatif",
"Féminin et Séropositif", "Masculin et Séropositif"
)
couleurs <- c("#b8e794", "#b8e794", "#f0ddc6", "#f0ddc6")
# On cree le boxplot normalement
boxplot(age ~ sexe + resultat_test, data = cas_pratique,
# noms pour les differents axes
names = noms_abscisses,
main = "DISTRIBUTION DE L'ÂGE EN FONTION DU SEXE ET DU STATUT SÉROLOGIQUE",
xlab = "Sexe et statut sérologique",
ylab = "Age",
# couleurs pour les boites
col = couleurs,
# la fonte des axe en gras
font.axis = 2,
# la couleur sur les axes
col.axis = "#0038B2",
col.main = "#CC2828",
col.lab = "#0038B2",
# La taille du titre
cex.main = 2,
#La taille sur les axes
cex.axis = 1.5,
# la taille des titre des axes
cex.lab = 1.25,
border = "darkblue",
# enlever le cadre du graphique
frame.plot = FALSE
)
# On revoit la couleur des axes
axis(# Sur quel axe on veut effectuer des transformations?
side = 1,
#La couleur de l'axe?
col = "#0038B2",
# La couleur des marques sur l'axe
col.ticks = "darkblue",
# Faut-il y remettre de nouvelles etiquettes?
labels = FALSE
)
axis(# Sur quel axe on veut effectuer des transformations?
side = 2,
# La couleur de l'axe?
col = "#0038B2",
# La couleur des marques sur l'axe
col.ticks = "darkblue",
# Faut-il y remettre de nouvelles etiquettes?
# (on peut aussi donner un vecteur d'etiquettes)
labels = FALSE
)
#On met ici la legende
legend(# Ou est ce qu'on veut qu'elle soit
x = "topright",
# Un vecteur qui donne les valeurs a afficher
legend = c("Séronégatifs", "Séropositifs"),
# les couleurs des cadres (fill)
fill = c("#b8e794", "#f0ddc6"),
# la couleur du bord des petits carres
border = "darkblue",
# la couleur du cadre de la legende
box.col = "darkblue",
#Le titre de la legende
title = "Statut sérologique",
# la couleur du titre de la legende.
title.col = "#CC2828",
# la taille globale de la legende
cex = 1.5,
text.col = "#0038B2")
Figure 5: Boxplot avec des options supplémentaires
na.rmLe montant investit est la somme que l’on remet à un individu lorsqu’il vient chercher son test. On décide de calculer la somme totale investie dans l’étude (Que l’individu vienne récupérer son test ou pas) grâce à la fonction sum. C’est la somme de la variable montat_incitation dans la base de données.
sum(cas_pratique$montat_incitation)
[1] 604205.6
On sait très bien que la variable montat_incitation ne contient pas de données manquantes. Mais que serait-t-il de cette somme si elle en contenait? Lorsque l’on essaye de faire des calculs sur un vecteur qui contient des données manquantes (qui sont notées NA), R retourne des données manquantes en sortie. Pour cela, créons un vecteur de avec une donnée manquante en jumelant le vecteur montat_incitation et un NA 3 et calculons la somme de ce vecteur.
nouveau_vecteur <- c(cas_pratique$montat_incitation, NA)
sum(nouveau_vecteur)
[1] NA
On voit bien que la somme retourne une donnée manquante NA. P our éviter que la somme retourne un NA, on va lui ajouter l’argument na.rm = TRUE qui signifie littéralement retirez les données manquantes dans le calcul de la somme. Cet argument est commun à plusieurs fonctions qui travaillent sur les numériques en particulier:
mean qui calcule la moyenne d’un vecteur où il y a des valeurs numériques
var qui calcule la variance de l’échantillon
sd qui calcule l’écart type de l’échantillon
et bien d’autres encore.
sum(nouveau_vecteur, na.rm = TRUE)
[1] 604205.6
mean(nouveau_vecteur, na.rm = TRUE)
[1] 560.4875
var(nouveau_vecteur, na.rm = TRUE)
[1] 226696.5
sd(nouveau_vecteur, na.rm = TRUE)
[1] 476.1265
Question une
Comment mettre des pourcentages en étiquettes au niveau de l’axe des y?
Reprenons le graphique en barres sur les manquants. Il serait intéressant d’ajouter en étiquette le pourcentage de manquants avec les pourcentages (%) sur l’axe des ordonnées. Je voulais laisser cette question pour y revenir avec le package ggplot2, mais je pense que je vais l’aborder ici sans utiliser de package, parce que nous allons apprendre quelques fonctions de R.
seq. L’argument pour préciser le pas est l’argument by.
vecteur_numerique <- seq(-1, #debut
1, #fin
by = 0.1 #le pas
)
vecteur_numerique
[1] -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4
[16] 0.5 0.6 0.7 0.8 0.9 1.0
paste. Lorsque l’on ne donne à la fonction paste qu’un seul argument à coller avec un vecteur, elle va le coller avec toutes les données du vecteur, un à un: on parle de recyclage. La fonction paste a un argument sep qui permet de préciser le séparateur que l’on veut utiliser dans le processus de collage.
vecteur_bizarre <- c("un", "deux")
paste(vecteur_bizarre, "ami(s)", sep = " bon(s)")
[1] "un bon(s)ami(s)" "deux bon(s)ami(s)"
Vous-vous rappelez de la conversion automatique? Si je fais un collage entre un vecteur numérique et tout autre chose, je vais obtenir un caractère et le vecteur numérique sera converti en caractères avant de passer au collage.
paste(vecteur_numerique, "%", sep = " ")
[1] "-1 %" "-0.9 %" "-0.8 %" "-0.7 %" "-0.6 %" "-0.5 %" "-0.4 %" "-0.3 %"
[9] "-0.2 %" "-0.1 %" "0 %" "0.1 %" "0.2 %" "0.3 %" "0.4 %" "0.5 %"
[17] "0.6 %" "0.7 %" "0.8 %" "0.9 %" "1 %"
Bien là on a déjà comment créer un vecteur d’étiquettes. Voilà comment on va procéder.
0- Supprimer l’axe y créé par défaut dans le graphique en ajoutant l’argument yaxt = "n"
1- Créer une séquence qui seront les graduations de l’axe des y grâce à la fonction seq
2- Créer un vecteur d’étiquettes qui va être les séquences où l’on aura collé “%” grâce à paste
3- Appliquer cette séquence et les étiquettes associées à l’axe des ordonnées grâce à la fonction axis.
noms <- c("sexe", "age", "niveau d’étude",
"résultat du test", "incitation reçue?",
"montant de l'incitation", "test cherche?",
"rapports sexuels?", "rap. sexuels 12 mois?")
# les coupures au niveau des graduations
graduations_y <- seq(0, 18, by = 1)
label_y <- paste(graduations_y, "%", sep = " ")
barplot(100 * pourcentage_manquants,
#Le nom des elements de l'axe x
names.arg = noms,
# le titre de l'axe x
xlab = "Différentes variables",
ylab = "manquants", # Le titre de l'axe y
main = "REPRESENTATION DES % DE MANQUANTS",# Le titre du graphe
cex.lab = 1.25,
yaxt = "n" #Pour supprimer l'axe produit par defaut.
)
#On met ici les labels
axis(side = 2, #L'axe sur lequel on veut travailler
at = graduations_y, #Les endroits ou se trouvent les coupures
labels = label_y, #Le label des coupures
las = 1 #L'ajustement
)
Figure 6: Barplot avec des %
Question deux
J’ai longtemps utilisé du Rmarkdown, mais je n’y arrive pas à concevoir un document long et très structuré.
Eh bien, je vous propose de regarder le bookdown. Le Rmarkdown a pour énorme avantage sa simplicité et sa flexibilité. Mais quand il vient à écrire des documents volumineux et lourds, je ne peux que vous conseiller d’utiliser le bookdown du package bookdown. On y reviendra en large à la séance prochaine, mais je trouve judicieux de l’introduire un peu ici.
Pour la prochaine séance, j’ai demandé si vous préférez une séance pur Rmarkdown, ou une séance où on va entrer plus en profondeur dans le tidyverse et faire beaucoup de manipulations de données et des statistiques basées sur les tests. Très peu de personnes ont répondu et c’était dubitatif. Je vais donc diviser la session en deux parties: Une première qui va être axée sur le tidyverse, une autre sur Rmarkdown et ses basiques. Prenez le temps de bien apprendre ce fichier avant d’arriver et de vous documenter un peu si vous savez que vous aurez de légères difficultés. ET SURTOUT N’OUBLIEZ PAS D’INSTALLER LES PACKAGES. La séance prochaine sera très intéressante, promis. ;-)
Pour suivre ce récapitulatif, veuillez installer les packages suivants:
Les packages du tidyverse: en tapant à la console install.packages("tidyverse").
Si vous ne les avez pas encore, les packages rmarkdown, knitr et devtools en tapant à la console install.packages(c("rmarkdown", "devtools")).
Pour ceux qui n’étaient pas là , vous avez raté quoi….
A la séance 3, on a eu une bonne dose d’installation qui a fait abandonné plusieurs personnes parce que les amis n’avaient pas installé les packages nécessaires. A la séance 4, on a essayé de rattraper le tir en montrant un peu le tidyverse, le ggplot2, les tests statistiques et une présentation sur la création de packages sous R. Malheureusement, on n’a pas pas pu faire les boucles et le if. On va y revenir dans le récapitulatif.
Outre la séance d’installation de la séance 3, on a introduit les projets de RStudio, le rmarkdown et on a effectué une petite introduction au tidyverse. On a ainsi appris à créer et gérer un projet sous Rstudio, traiter un document rmarkdown et on a lancé les bases du tidyverse avec un focus sur l’opérateur pipe… %>% Au passage on a appris quelques raccourcis claviers dont je vais reparler.
Quelques personnes s’étaient plaintes sur l’impossibilité de réaliser des documents lourds et structurés avec du rmarkdown. Je vais essayer de montrer que c’est faux et de vous faire prendre goût à rédiger vos documents et vos rapports dans la section sur rmarkdown, avec une introduction au bookdown. J’avais aussi promis de faire un clin d’œil sur le blogdown pour vous montrer rapidos comment créer votre propre blog ou site web, qui vous permettra si vous le nourrissez régulièrement de vous mettre à jour, d’apprendre aux autres et d’apprendre des autres aussi. J’ai aussi introduit une sous-section dessus dans la partie rmarkdown. Si c’est seulement cette section sur rmarkdown et compagnies qui vous intéresse, allez lire la section là (section).
Vous vous rappelez de notre base sur les essais randomisés? Après avoir introduit le tidyverse, on va essayer de vérifier que les classes d’age sont respectées en faisant une pyramide des âges (on l’a faite à la séance 4), et ensuite, on va passer à des tests statistiques pour vérifier quelques associations. Le tout sera accompagné de visualisations graphiques avec ggplot2. Si c’est juste la section sur ggplot2 et ses visualisations qui vous intéresse, je vous conseille de vous y plonger ici. Par contre, si vous ne vous intéressez qu’à la partie stats, n’hésitez pas à aller là (section).
A la fin de la séance, on a fait une petite démonstration sur la création de packages. Je vais revenir là dessus et vous montrer au passage les boucles et le if, avec quelques astuces. C’est la partie programmation et consorts… Si vous êtes là que pour ça, allez directement à la section concernée (section )
Ça fait beaucoup de choses non? On y va!
L’idée des projets est de mieux organiser votre travail - ou votre projet- sous R en gardant le répertoire de travail au répertoire du projet et en adopdant une hiérarchie des dossiers qui va vous permettre de garder de bonnes habitudes de travail et de rigueur. La structure du dossier final de projet est la suivante 4:
dossier_projet
+
++++ dossier_projet.Rproj
+
++++++++ data/
+ +
+ ++++++++++ cas_pratique.dta
+ ++++++++++ cas_pratique.RData
+ ++++++++++ cas_pratique.sav
+ ++++++++++ cas_pratique.txt
+ ++++++++++ cas_pratique.xlsx
+
++++++++ input/
+
++++++++ output/
+ +++++++ figures/
+ +
+ +++++++ data/
+
++++++++ 1-premier-script.R
+
++++++++ 2-un-document-markdown.Rmd
+
++++++++ readme.txt
On commence par un dossier vide qui va être le dossier de notre projet. Ce dossier sera de-facto le répertoire de travail lorsque l’on va lancer le projet sous Rstudio, ce qui permet d’éviter la partie set/get/wd.
Le dossier contient trois sous-dossiers 5:
Un dossier data dans lequel devraient se trouver les bases de données de notre analyse.
Un dossier input où seront les figures et tous les autres objets qui viendront enrichir notre travail, sans forcement provenir de R (captures d’écran, etc.)
Un dossier output où seront les sorties qui seront réalisées avec R. Ces sorties sont divisées en deux principales parties: les figures et les graphes.
On a d’abord créé notre projet en allant dans File > New Project.... On a obtenu la fenêtre suivante et on a créé le projet dans un dossier. On a insisté sur le fait qu’un projet est en fait un dossier que Rstudio va créer. On a donc choisi l’option New Directory, puis l’option New Project et enfin un répertoire où le dossier du projet va être.
On a utilisé les navigations dans l’onglet Files du quatrième panneau (en bas a droite pour ceux qui n’ont pas changé la disposition par défaut) pour créer l’arborescence qu’on a présenté en haut. On a alors introduit un fichier rmarkdown, qui devait contenir les codes et les output de nos travaux, et on l’a enregistré dans le dossier du projet. La prochaine section va en détail sur le rmarkdown et explique un peu comment il est conçu.
Comment est né R Markdown? 6 De l’idée de faire du texte et du code R en même temps dans un même fichier, de façon reproductible et facilement partageable. Le pionnier de cette idée est Yihui Xie, qui s’est appuyé sur l’ancêtre du travail reproductible Sweave, qui permettait de faire du LaTeX et du R dans un même fichier, afin de faciliter la rédaction de rapports qui nécessitaient les mêmes types d’analyses. Il a lancé le package knitr sur lequel repose le package rmarkdown. C’est l’essentiel. R Markdown est souvent présenté sous la forme suivante, mettant en exergue les formats de sortie.
Pour ceux qui sont pressés sur la syntaxe du markdown ou carrément n’ont pas envie de se taper la lecture de tout ceci, je vous conseille de lire la feuille de triche faite par Rstudio. Vous pouvez ainsi sauter toute cette section pour aller lire celles qui vous intéresseraient. Pour ceux qui veulent toujours rester dans le même fichier, voici une tour rapide du markdown.
“What is Reproducibility? Reproducibility is one of the main principles of the scientific method, and refers to the ability of a test or experiment to be accurately reproduced, or replicated, by someone else working independently.”
Yihui Xie
A cause des raisons suivantes:
La reproductibilité. L’idée de la reproductibilité est de permettre à tout un chacun de pouvoir reprendre n’importe quelle étude et analyses, en suivant exactement les memes étapes.
R Markdown a une syntaxe facile à maîtriser; en quelques minutes d’effort on acquiert l’essentiel pour écrire son document.
Avec un seul fichier, vous pouvez avoir plusieurs formats à la clé (Word, PDF (à condition d’avoir LaTeX), HTML).
Cela permet de faciliter le partage de fichiers, l’explication des scripts effectués et le partage au niveau de la communauté scientifique.
Et enfin, on peut écrire tout un article en Markdown. Faites un tour sur la Gallerie de rmarkdown et regardez la variété de documents que l’on peut réaliser avec.
On a appris à créer un fichier rmarkdown sous Rstudio. Pour ce faire, lancez R Markdown en effectuant les tâches suivantes dans R Studio:
File>New File>R Markdown
Il apparaît alors une fenêtre demandant de préciser les paramètres du fichier que l’on a créé. Il faut préciser le titre du document, son auteur et le format de sortie. Il est possible d’avoir du word (en fait un .docx) ou du pdf comme format de sortie, je reviendrai dans la section sur la sortie pdf. Pour la version word, je vous renvoie à la documentation7 pour de plus amples explications. On reviendra cependant sur quelques astuces liées à la rédaction de documents sous word.
Une fois les paramètres spécifiés, on peut passer à l’analyse du document basique qui sert de début à l’apprentissage du langage de R Markdown. Il s’agit du document suivant:
knitr::include_graphics("figures/fichier_basique.png")
L’en-tête d’un document R Markdown est constitué de petites phrases ou de petits mots entourées d’un ---, comme dans le document utilisé pour créer ce fichier que vous lisez:
---
title: "Récapitulatifs tout en un"
author: "Amevoin Komlavi Yves, ISE"
date: ""
output:
pagedown::html_paged:
toc: TRUE
self_contained: TRUE
css: ["my-fonts.css", "my-page.css", "my-default.css"]
---
Cet ensemble de phrases contient les informations nécessaires au paramétrage du document. Le document lui même peut être considéré comme un ensemble de données (section, texte, code R), et les parties situées entre ces ---, des informations donnant des attributs et des paramètres à ces données (couleur, titre, date de création, format): On parle de métadonnées. Ces attributs doivent être transmis à un langage qui se charge de les stocker et de les rendre au document pour en changer l’aspect ou ajouter des informations. Ce langage, c’est le YAML qui signifiait au début Yet Another Markup Language mais qui est devenu YAML Aint Markup Language. En clair le YAML c’est quoi? Une syntaxe qui permet de stocker des données sur le document et qui les utilise pour paramétrer le document R Markdown et y ajouter des choses. Cette syntaxe est très stricte, avec des deux points, des retours à la ligne, des guillemets et des indentations (petits espaces après le retour à la ligne) pour cibler les sous-options d’une option mere. Par exemple, pour le html_document qui signifie le format de sortie, on a demande d’inclure une table des matieres (toc:yes), la possibilite de telecharger les codes du document (code_download : TRUE). Les options sont en général liées aux formats de sortie liees au document que vous voulez obtenir. Comment les données sur le document sont stockées? Dans un objet appelé metadata dans le package rmarkdown. Regardez:
rmarkdown::metadata$title
[1] "RÉCAPITULATIFS TOUT EN UN"
Pour un document HTML, il existe une pléthore de paramètres (auteur, date, fonte, etc.) et l’on peut même ajouter un ficher qui prend bien en charge la mise en forme, comme mon fichier my-font.css que vous voyez dans l’option css. On peut en faire de même avec un fichier PDF. On pourrait écrire un article dessus. Mais en général le petit nombre de paramètres par défaut proposé par Rstudio suffit amplement pour des documents de petite envergure. Dans le cas où vous voulez des documents lourds, il serait souhaitable de jeter un coup d’œil sur les pages suivantes afin de regarder comment contrôler la mise en page:
Pour le format HTML, Regardez ici
Pour le format PDF, Regardez là
Pour le format Word, Jettez un coup d’oeil là
Un fichier rmarkdown est un fichier dans lequel se trouvent les codes qui vont permettre de génerer les analyses et les résultats associés aux analyses proprement dites ainsi que les commentaires de ces analyses. Ces codes se trouvent dans des portions grises appelées chunk, afin de les distinguer des commentaires - du texte brut - que vous écrivez. Comment insérer un chunk lorsque l’on travaille sous Rstudio? Pour insérer un chunk R sous Rstudio, utilisez le raccourci clavier CTRL+ALT+I. Mais si vous voulez vous taper la syntaxe de l’écriture, un chunk commence par ces trois accents graves ``` suivis de r (si l’on veut écrire en R) que l’on met entre des accolades, ```{r} et il se termine par trois accents graves aussi ```. Une erreur commune est de ne pas terminer son chunk ou d’effacer par maladresse les trois accents de la fin, ou d’en mettre plus ou moins de trois.
Les chunk peuvent avoir des options en fonction de comment l’on veut traiter le rendu. En général on peut soit vouloir afficher le code ou pas, soit la sortie du code ou pas, soit évaluer le code ou pas. Vous pouvez parcourir les options d’un chunk R que vous aurez inséré en cliquant sur les paramètres du chunk.
Un data.frame est en fait une liste dont les constituants ont la même longueur.↩
Une question avait été posée sur l’étiquetage des axes des ordonnées avec des pourcentages. On va en revenir après dans la section les petites questions que j’ai reçues.↩
Vous venez d’apprendre la deuxième façon de créer un vecteur, cette fois ci composé de numériques.↩
Le readme.txt que j’ai ajouté n’est pas obligatoire, mais il serait intéressant d’expliquer aux gens le dossier et ce qu’il y a l’intérieur.↩
Libre à vous d’organiser votre dossier de travail comme vous voulez, pourvue que vous gardiez une certaine rigueur dans l’organisation.↩
Les personnes qui trouveraient une quelconque similitude avec un de mes anciens docs… No comments.↩
Je me suis rendu compte qu’il est long quand je l’ai fini.↩